Pengacakan: Strategi Perubahan Ukuran

PolyU DSAI2201Kuliah 132025-11-25

Kebutuhan Rehashing

Untuk menjamin kinerja rata-rata yang diharapkan O(1)O(1) untuk pencarian dan penyisipan, faktor muatan (Faktor Muatan (λ=N/M\lambda = N/M) harus dibatasi secara ketat, di mana NN adalah jumlah elemen dan MM adalah kapasitas tabel.

Jika λ\lambda diperbolehkan tumbuh tanpa batas, tabrakan meningkat secara eksponensial, dan kompleksitas waktu rata-rata menurun menuju O(N)O(N).

KondisiAksi yang DipicuDampak
λ<λmax\lambda < \lambda_{max}Standar O(1)O(1) penyisipanEfisiensi optimal terjaga.
λλmax\lambda \geq \lambda_{max}Perubahan Ukuran (Rehashing)Mengembalikan O(1)O(1) kinerja, tetapi menimbulkan biaya sementara O(N)O(N) biaya.

Ambang Batas Umum (λmax\lambda_{max}): 0.70 hingga 0.75.

Proses Perubahan Ukuran

Perubahan ukuran memerlukan penghitungan ulang indeks hash untuk setiap item yang ada dalam tabel saat ini, proses yang dikenal sebagai Rehashing.

  1. Penentuan Kapasitas Baru: Pilih kapasitas baru MnewM_{new}, biasanya dua kali kapasitas saat ini (Mnew=2MM_{new} = 2M). Ini memastikan bahwa λ\lambda adalah separuh dari ambang batas kritis.
  2. Pembuatan Tabel: Alokasikan array tabel hash baru dengan ukuran MnewM_{new}.
  3. Iterasi Item: Putar melalui semua NN elemen yang ada dalam tabel lama.
  4. Re-hashing: Untuk setiap kunci kk, hitung indeks baru menggunakan modulus yang diperbarui: indeks=h(k)(modMnew) \text{indeks}' = h(k) \pmod{M_{new}}
  5. Penyisipan: Masukkan item ke dalam tabel baru pada indeks\text{indeks}'.

Catatan: Karena modulus berubah, hanya menyalin array tidak mungkin; setiap item harus dimasukkan kembali.

Biaya Amortisasi

Mengapa Perubahan Ukuran adalah O(N)O(N)

Perubahan ukuran memerlukan pemrosesan semua NN elemen, artinya operasi itu sendiri membutuhkan waktu O(N)O(N) waktu, yang sementara melanggar tujuan O(1)O(1) penyisipan.

Analisis Amortisasi

Kami menggunakan Analisis Amortisasi untuk membenarkan biaya ini. Jika tabel menggandakan ukurannya setiap kali diperbesar (pertumbuhan eksponensial), biaya mahal O(N)O(N) akan tersebar di antara sejumlah besar penyisipan yang terjadi di antaranya O(1)O(1) penyisipan.

Biaya rata-rata dari setiap penyisipan tunggal, dengan mempertimbangkan perubahan ukuran berkala O(N)O(N) perubahan ukuran, tetap O(1)O(1).

📝 Kuis Interaktif

1. Sebuah peta hash memiliki kapasitas M=50M=50 dan faktor muatan maksimum λmax=0.6\lambda_{max} = 0.6. Pada jumlah elemen berapa (NN) perubahan ukuran harus dipicu?

  • A) N=25N = 25
  • B) N=30N = 30
  • C) N=31N = 31
  • D) N=50N = 50

2. Selama perubahan ukuran, mengapa kita tidak bisa sekadar menyalin elemen dari tabel lama ke tabel baru yang lebih besar?

  • A) Lebih lambat secara komputasi daripada rehashing.
  • B) Indeks hash bergantung pada kapasitas tabel (MM), yang telah berubah.
  • C) Akan menyebabkan fragmentasi memori.
  • D) Data lama berada dalam status baca saja.

3. Berapa kompleksitas waktu amortisasi dari penyisipan dalam tabel hash yang menggandakan ukurannya saat perubahan ukuran?

  • A) O(N)O(N)
  • B) O(1)O(1)
  • C) O(logN)O(\log N)
  • D) O(NlogN)O(N \log N)

4. Apa konsekuensi utama dari tidak melakukan perubahan ukuran tabel hash ketika faktor muatannya terlalu tinggi?

  • A) Kinerja menurun menuju O(N)O(N) karena peningkatan tabrakan.
  • B) Tabel akan kehabisan memori segera.
  • C) Fungsi hash itu sendiri menjadi tidak valid.
  • D) Tabel secara otomatis menghapus elemen tertua.